﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace Biuro.Formy
{
    public delegate void DodawanieHotelu();
    public delegate void DodawanieTypu();
    public delegate void DodawaniePromocji();
    public delegate void DodawanieUslugi();
    public partial class AddEditTrip : Form
    {
        public AddEditTrip()
        {
            InitializeComponent();
        }

        public event DodawanieHotelu DodajHotel;
        public event DodawaniePromocji DodajPromocje;
        public event DodawanieTypu DodajTyp;
        public event DodawanieUslugi DodajUsluge;
        ArrayList promocje;

        public ArrayList Promocje
        {
            get { return promocje; }
            set 
            { 
                promocje = value;
                cbPromocja.DataSource = null;
                cbPromocja.DisplayMember = "Nazwa";
                cbPromocja.ValueMember = "Id";
                cbPromocja.DataSource = promocje;
            }
        }
        List<int> wybraneUslugi;

        public List<int> WybraneUslugi
        {
            get { return wybraneUslugi; }
            set { wybraneUslugi = value; }
        }

        ArrayList hotele;
        public ArrayList Hotele
        {
            get { return hotele; }
            set 
            { 
                hotele = value;
                cbHotel.DataSource = null;
                cbHotel.DisplayMember = "Nazwa";
                cbHotel.ValueMember = "Liczba";
                cbHotel.DataSource = hotele;
            }
        }
        ArrayList typy;
        public ArrayList Typy
        {
            get { return typy; }
            set 
            { 
                typy = value;
                cbTyp.DataSource = null;
                cbTyp.DisplayMember = "Nazwa";
                cbTyp.ValueMember = "Liczba";
                cbTyp.DataSource = typy;
            }
        }

        public DataTable UslugiDodatkowe
        {
            set
            {
                if (dgwUslugi.DataSource != null)
                {
                    dgwUslugi.Columns.Remove("id");
                    dgwUslugi.Columns.Remove("nazwa");
                    dgwUslugi.Columns.Remove("cena");

                }
                dgwUslugi.DataSource = value;
                if (dgwUslugi.DataSource != null)
                {
                    dgwUslugi.Columns["id"].Visible = false;
                    dgwUslugi.Columns["nazwa"].ReadOnly = true;
                    dgwUslugi.Columns["cena"].ReadOnly = true;
                }
            }
        }
        public double Cena
        {
            get { return Double.Parse(tbCena.Text); }
            set { tbCena.Text = value.ToString(); }
        }
        public string Nazwa
        {
            get { return tbNazwa.Text; }
            set { tbNazwa.Text = value; }
        }
        public string Opis
        {
            get { return tbOpis.Text; }
            set { tbOpis.Text = value; }
        }
        public DateTime DataRozpoczecia
        {
            get { return dtDataRozpoczecia.Value; }
            set { dtDataRozpoczecia.Value = value; }
        }
        public DateTime DataZakonczenia
        {
            get { return dtDataZakonczenia.Value; }
            set { dtDataZakonczenia.Value = value; }
        }
        public int IloscMiejsc
        {
            get { return (int)nmIloscMiejsc.Value; }
            set { nmIloscMiejsc.Value = (int)value; }
        }
        public int WybranyHotel
        {
            get { return Int32.Parse(cbHotel.SelectedValue.ToString()); }
        }
        public int WybranaPromocja
        {
            get { return Int32.Parse(cbPromocja.SelectedValue.ToString()); }
        }
        public int WybranyTyp
        {
            get { return Int32.Parse(cbTyp.SelectedValue.ToString()); }
        }
        private void AddEditTrip_Load(object sender, EventArgs e)
        {
            Reset();
            cbHotel.DataSource = null;
            cbHotel.DisplayMember = "Nazwa";
            cbHotel.ValueMember = "Liczba";
            cbHotel.DataSource = hotele;

            cbTyp.DataSource = null;
            cbTyp.DisplayMember = "Nazwa";
            cbTyp.ValueMember = "Liczba";
            cbTyp.DataSource = typy;

            cbPromocja.DataSource = null;
            cbPromocja.DisplayMember = "Nazwa";
            cbPromocja.ValueMember = "Id";
            cbPromocja.DataSource = promocje;

            tpPomoc.SetToolTip(lbDodajHotel, "Dodaj nowy hotel");
            tpPomoc.SetToolTip(dgwUslugi, "Wybierz usługi dodatkowe \n możesz wybrać kilka przytrzymująć CTRL");
        }
        private void btDodaj_Click(object sender, EventArgs e)
        {

            bool bledy = false;
            if (!System.Text.RegularExpressions.Regex.IsMatch(tbNazwa.Text.ToLower(), @"\b\p{L}{2,25}\b"))
            {
                tbNazwa.BackColor = Color.Red;
                bledy = true;
            }
            else
            {
                tbNazwa.BackColor = Color.White;
            }

            if (!System.Text.RegularExpressions.Regex.IsMatch(tbCena.Text, @"\b\d{1,7}\b"))
            {
                tbCena.BackColor = Color.Red;
                bledy = true;
            }
            else
            {
                tbCena.BackColor = Color.White;
            }
            wybraneUslugi = new List<int>();
            foreach (DataGridViewRow row in dgwUslugi.Rows)
            {
                if (row.IsNewRow) continue;
                if (row.Selected)
                {
                    wybraneUslugi.Add((int)row.Cells[0].Value);
                }
            }

            if (bledy == false)
                this.DialogResult = DialogResult.OK;
        }
        //wywołanie dodawania nowego hotelu
        private void lbDodajHotel_Click(object sender, EventArgs e)
        {
            if (DodajHotel != null)
                DodajHotel();
        }

        private void lbDodajPromocje_Click(object sender, EventArgs e)
        {
            if (DodajPromocje != null)
                DodajPromocje();
        }

        private void lbDodajTyp_Click(object sender, EventArgs e)
        {
            if (DodajTyp != null)
                DodajTyp();
        }
        public void Reset()
        {
            foreach (TextBox t in this.Controls.OfType<TextBox>().ToArray())
                t.Text = "";
        }

        private void lbDodajUsluge_Click(object sender, EventArgs e)
        {
            if (DodajUsluge != null)
                DodajUsluge();
        }

        private void AddEditTrip_Paint(object sender, PaintEventArgs e)
        {
            System.Drawing.Drawing2D.LinearGradientBrush basebackground;
            basebackground = new System.Drawing.Drawing2D.LinearGradientBrush(new Point(0, 0), new Point(0, ClientSize.Height), Color.White, Color.LightGray);
            e.Graphics.FillRectangle(basebackground, ClientRectangle);
        }
    }
}
